Project estimation is an ongoing need in all kinds of development and engineering projects. In many disciplines project estimation techniques are well established and widely successful. The success of these estimation techniques depends on general similarities between projects, such as in the nature and number of tasks to be performed, the standardization of materials and work products, the ability to anticipate resource quantities and costs, reliable expectations about the rate at which work will be performed, and so on.
Standard project estimation methods breakdown when applied to projects that differ from the norm or that vary in ways that are inconsistent with the assumptions of the methods. For such projects, up-front estimation of project characteristics such as total effort required or time to completion are likely to be inaccurate and unrealistic.
Software development is an example field in which a relatively large proportion of projects are not well estimated by traditional approaches. One reason is that once a software product has been developed it can easily be replicated, so there is seldom any need to build the same software product twice. For software development, then, the question is not whether a project will be new but rather how new it will be. Additionally, the nature of software development changes over time, as new programming languages, development methods, programming environments, execution platforms, and application domains arise. Software development thus directly feeds its own evolution. Additionally, the experience, skill level, and productivity of programmers practicing in the field vary widely, and the development methods and practices followed by organizations are often specialized and may be proprietary. A further complication is that the requirements on a software project may change during the project, the resources available to the project may likewise change during the project, and the project may be subject to uncontrolled dependencies on other projects or systems of uncertain characteristics and availability. All of these complications and others undermine the applicability and effectiveness of traditional process estimation techniques to software development, like projects or other projects that have similar characteristics.